package 旧版作用域相关;

import java.util.LinkedHashMap;
import java.util.Map;

public class 方法作用域符号 extends 符号 implements 作用域 {
    private final Map<String, 符号> 参数列表 = new LinkedHashMap<>();
    private final 作用域 父作用域;

    public 方法作用域符号(String 名称, 类型 返回值类型, 作用域 父作用域) {
        super(名称, 返回值类型);
        this.父作用域 = 父作用域;
    }

    public 符号 解析(String 名称) {
        var 符号 = 参数列表.get(名称);
        if (符号 != null) return 符号;
        
        // 在本作用域内找不到就找父作用域
        if (取父作用域() != null) {
            return 取父作用域().解析(名称);
        }
        return null; // 找不到
    }

    public void 定义(符号 符号) {
        参数列表.put(符号.取名称(), 符号);
        符号.作用域 = this; // 记录该符号所在的作用域
    }

    public 作用域 取父作用域() {
        return 父作用域;
    }

    public String 取作用域名() {
        return 取名称();
    }

    public String toString() {
        return "方法" + super.toString() + ":" + 参数列表.values();
    }
}
